from django.shortcuts import render, redirect, reverse
from django.template.defaultfilters import escape
from django.views.generic import View
from django.http import HttpResponse
import bleach
from bleach.sanitizer import ALLOWED_TAGS, ALLOWED_ATTRIBUTES
from .models import Comments


class IndexView(View):
    def get(self, request, *args, **kwargs):
        comments = Comments.objects.all()
        return render(request, 'index.html', context={
            'comments': comments
        })

    def post(self, request, *args, **kwargs):
        content = request.POST.get('content')
        # 1.Django的模板中默认就是转义的。也可以把数据在存储到数据库之前，就转义再存储进去
        # 这样以后在渲染的时候，即使不转义也不会有安全问题
        if content:
            # escape_content = escape(content)
            # Comments.objects.create(content=escape_content)

            # 2.处理富文本提交数据保留富文本部分样式
            # 在默认的允许标签中添加img标签
            tags = ALLOWED_TAGS + ['img']
            # 在默认的允许属性中添加src属性
            attributes = {**ALLOWED_ATTRIBUTES, 'img': ['src', 'alt']}
            # 对提交的数据进行过滤
            cleaned_data = bleach.clean(content, tags=tags, attributes=attributes)
            # 保存到数据库中
            Comments.objects.create(content=cleaned_data)
            # TODO: 提交成功重定向到首页
            return redirect(reverse('index'))
        else:
            return HttpResponse('参数异常')
